#include "controller.h"
#include "json.h"
#include "view.h"
#include "logger.h"
#include <iostream>

Controller::Controller() {
    m_bizTypeMap.insert(std::make_pair(LOGIN, new LoginView()));
    m_bizTypeMap.insert(std::make_pair(REGISTER, new RegisterView()));
    //在map里插入了两个键值对，LOGIN REGISTER这两个是之前定义的枚举值，分别是0和1 

}

Controller::~Controller() {

}

//这个函数将string字符串转为json格式
//通过读取json字符串，判断是哪一个业务，0是LOGIN 1是REGISTER。model层判断
//然后调用相应的回调函数，实现View层。
void Controller::process(int fd, std::string& data) {
    // data是string字符串 -> 转为json格式字符串
    // 这一步叫解码，也要decode

    using namespace nlohmann;   //<用的nlohmann的开源json框架
    nlohmann::json j = nlohmann::json::parse(data);
    //::parse(data); //< 格式转换完成
    LOG_INFO << data;
    
    
    //MVC模式下跳入处理具体业务
    //LOG_INFO<<"type:"<<j.at("bizType").get<int>();
    LOG_INFO << "type:" <<  j["bizType"].get<int>();
    int bizType = j["bizType"].get<int>();  //<取出业务类型，转化为整型数字

    m_bizTypeMap[bizType]->process(fd, data);   //<调用相对的回调函数，View
    //m_bizTypeMap[bizType]返回的是map里键值对的值，就是LoginView()对象或者RegisterView()对象
    /// 然后调用对象里的process函数，处理业务。实现View层
}